package hu.bme.mit.androtext.data.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import hu.bme.mit.androtext.data.services.AndroDataGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalAndroDataParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'modelID'", "'entity'", "'extends'", "'{'", "'}'", "'property'", "':'", "'*'", "'String'", "'float'", "'boolean'", "'int'"
    };
    public static final int RULE_ID=4;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;
    public static final int T__19=19;
    public static final int RULE_STRING=6;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=5;
    public static final int RULE_WS=9;

    // delegates
    // delegators


        public InternalAndroDataParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalAndroDataParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalAndroDataParser.tokenNames; }
    public String getGrammarFileName() { return "../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g"; }



     	private AndroDataGrammarAccess grammarAccess;
     	
        public InternalAndroDataParser(TokenStream input, AndroDataGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "AndroDataRoot";	
       	}
       	
       	@Override
       	protected AndroDataGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleAndroDataRoot"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:68:1: entryRuleAndroDataRoot returns [EObject current=null] : iv_ruleAndroDataRoot= ruleAndroDataRoot EOF ;
    public final EObject entryRuleAndroDataRoot() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAndroDataRoot = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:69:2: (iv_ruleAndroDataRoot= ruleAndroDataRoot EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:70:2: iv_ruleAndroDataRoot= ruleAndroDataRoot EOF
            {
             newCompositeNode(grammarAccess.getAndroDataRootRule()); 
            pushFollow(FOLLOW_ruleAndroDataRoot_in_entryRuleAndroDataRoot75);
            iv_ruleAndroDataRoot=ruleAndroDataRoot();

            state._fsp--;

             current =iv_ruleAndroDataRoot; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAndroDataRoot85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAndroDataRoot"


    // $ANTLR start "ruleAndroDataRoot"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:77:1: ruleAndroDataRoot returns [EObject current=null] : (otherlv_0= 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )* ) ;
    public final EObject ruleAndroDataRoot() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        EObject lv_types_2_0 = null;


         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:80:28: ( (otherlv_0= 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )* ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:81:1: (otherlv_0= 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )* )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:81:1: (otherlv_0= 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )* )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:81:3: otherlv_0= 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )*
            {
            otherlv_0=(Token)match(input,11,FOLLOW_11_in_ruleAndroDataRoot122); 

                	newLeafNode(otherlv_0, grammarAccess.getAndroDataRootAccess().getModelIDKeyword_0());
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:85:1: ( (lv_name_1_0= RULE_ID ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:86:1: (lv_name_1_0= RULE_ID )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:86:1: (lv_name_1_0= RULE_ID )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:87:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAndroDataRoot139); 

            			newLeafNode(lv_name_1_0, grammarAccess.getAndroDataRootAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getAndroDataRootRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:103:2: ( (lv_types_2_0= ruleType ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==12) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:104:1: (lv_types_2_0= ruleType )
            	    {
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:104:1: (lv_types_2_0= ruleType )
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:105:3: lv_types_2_0= ruleType
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getAndroDataRootAccess().getTypesTypeParserRuleCall_2_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleType_in_ruleAndroDataRoot165);
            	    lv_types_2_0=ruleType();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getAndroDataRootRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"types",
            	            		lv_types_2_0, 
            	            		"Type");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAndroDataRoot"


    // $ANTLR start "entryRuleType"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:129:1: entryRuleType returns [EObject current=null] : iv_ruleType= ruleType EOF ;
    public final EObject entryRuleType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleType = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:130:2: (iv_ruleType= ruleType EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:131:2: iv_ruleType= ruleType EOF
            {
             newCompositeNode(grammarAccess.getTypeRule()); 
            pushFollow(FOLLOW_ruleType_in_entryRuleType202);
            iv_ruleType=ruleType();

            state._fsp--;

             current =iv_ruleType; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleType212); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleType"


    // $ANTLR start "ruleType"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:138:1: ruleType returns [EObject current=null] : this_Entity_0= ruleEntity ;
    public final EObject ruleType() throws RecognitionException {
        EObject current = null;

        EObject this_Entity_0 = null;


         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:141:28: (this_Entity_0= ruleEntity )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:143:5: this_Entity_0= ruleEntity
            {
             
                    newCompositeNode(grammarAccess.getTypeAccess().getEntityParserRuleCall()); 
                
            pushFollow(FOLLOW_ruleEntity_in_ruleType258);
            this_Entity_0=ruleEntity();

            state._fsp--;

             
                    current = this_Entity_0; 
                    afterParserOrEnumRuleCall();
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleType"


    // $ANTLR start "entryRuleEntity"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:159:1: entryRuleEntity returns [EObject current=null] : iv_ruleEntity= ruleEntity EOF ;
    public final EObject entryRuleEntity() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEntity = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:160:2: (iv_ruleEntity= ruleEntity EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:161:2: iv_ruleEntity= ruleEntity EOF
            {
             newCompositeNode(grammarAccess.getEntityRule()); 
            pushFollow(FOLLOW_ruleEntity_in_entryRuleEntity292);
            iv_ruleEntity=ruleEntity();

            state._fsp--;

             current =iv_ruleEntity; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleEntity302); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEntity"


    // $ANTLR start "ruleEntity"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:168:1: ruleEntity returns [EObject current=null] : (otherlv_0= 'entity' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_features_5_0= ruleFeature ) )* otherlv_6= '}' ) ;
    public final EObject ruleEntity() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_features_5_0 = null;


         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:171:28: ( (otherlv_0= 'entity' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_features_5_0= ruleFeature ) )* otherlv_6= '}' ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:172:1: (otherlv_0= 'entity' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_features_5_0= ruleFeature ) )* otherlv_6= '}' )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:172:1: (otherlv_0= 'entity' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_features_5_0= ruleFeature ) )* otherlv_6= '}' )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:172:3: otherlv_0= 'entity' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )? otherlv_4= '{' ( (lv_features_5_0= ruleFeature ) )* otherlv_6= '}'
            {
            otherlv_0=(Token)match(input,12,FOLLOW_12_in_ruleEntity339); 

                	newLeafNode(otherlv_0, grammarAccess.getEntityAccess().getEntityKeyword_0());
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:176:1: ( (lv_name_1_0= RULE_ID ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:177:1: (lv_name_1_0= RULE_ID )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:177:1: (lv_name_1_0= RULE_ID )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:178:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEntity356); 

            			newLeafNode(lv_name_1_0, grammarAccess.getEntityAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getEntityRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:194:2: (otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) ) )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==13) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:194:4: otherlv_2= 'extends' ( (otherlv_3= RULE_ID ) )
                    {
                    otherlv_2=(Token)match(input,13,FOLLOW_13_in_ruleEntity374); 

                        	newLeafNode(otherlv_2, grammarAccess.getEntityAccess().getExtendsKeyword_2_0());
                        
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:198:1: ( (otherlv_3= RULE_ID ) )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:199:1: (otherlv_3= RULE_ID )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:199:1: (otherlv_3= RULE_ID )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:200:3: otherlv_3= RULE_ID
                    {

                    			if (current==null) {
                    	            current = createModelElement(grammarAccess.getEntityRule());
                    	        }
                            
                    otherlv_3=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEntity394); 

                    		newLeafNode(otherlv_3, grammarAccess.getEntityAccess().getSuperTypeEntityCrossReference_2_1_0()); 
                    	

                    }


                    }


                    }
                    break;

            }

            otherlv_4=(Token)match(input,14,FOLLOW_14_in_ruleEntity408); 

                	newLeafNode(otherlv_4, grammarAccess.getEntityAccess().getLeftCurlyBracketKeyword_3());
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:215:1: ( (lv_features_5_0= ruleFeature ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==16) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:216:1: (lv_features_5_0= ruleFeature )
            	    {
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:216:1: (lv_features_5_0= ruleFeature )
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:217:3: lv_features_5_0= ruleFeature
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getEntityAccess().getFeaturesFeatureParserRuleCall_4_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleFeature_in_ruleEntity429);
            	    lv_features_5_0=ruleFeature();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getEntityRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"features",
            	            		lv_features_5_0, 
            	            		"Feature");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);

            otherlv_6=(Token)match(input,15,FOLLOW_15_in_ruleEntity442); 

                	newLeafNode(otherlv_6, grammarAccess.getEntityAccess().getRightCurlyBracketKeyword_5());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEntity"


    // $ANTLR start "entryRuleFeature"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:245:1: entryRuleFeature returns [EObject current=null] : iv_ruleFeature= ruleFeature EOF ;
    public final EObject entryRuleFeature() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFeature = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:246:2: (iv_ruleFeature= ruleFeature EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:247:2: iv_ruleFeature= ruleFeature EOF
            {
             newCompositeNode(grammarAccess.getFeatureRule()); 
            pushFollow(FOLLOW_ruleFeature_in_entryRuleFeature478);
            iv_ruleFeature=ruleFeature();

            state._fsp--;

             current =iv_ruleFeature; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleFeature488); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFeature"


    // $ANTLR start "ruleFeature"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:254:1: ruleFeature returns [EObject current=null] : (otherlv_0= 'property' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_type_3_0= ruleTypeRef ) ) ) ;
    public final EObject ruleFeature() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        EObject lv_type_3_0 = null;


         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:257:28: ( (otherlv_0= 'property' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_type_3_0= ruleTypeRef ) ) ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:258:1: (otherlv_0= 'property' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_type_3_0= ruleTypeRef ) ) )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:258:1: (otherlv_0= 'property' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_type_3_0= ruleTypeRef ) ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:258:3: otherlv_0= 'property' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_type_3_0= ruleTypeRef ) )
            {
            otherlv_0=(Token)match(input,16,FOLLOW_16_in_ruleFeature525); 

                	newLeafNode(otherlv_0, grammarAccess.getFeatureAccess().getPropertyKeyword_0());
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:262:1: ( (lv_name_1_0= RULE_ID ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:263:1: (lv_name_1_0= RULE_ID )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:263:1: (lv_name_1_0= RULE_ID )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:264:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeature542); 

            			newLeafNode(lv_name_1_0, grammarAccess.getFeatureAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getFeatureRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,17,FOLLOW_17_in_ruleFeature559); 

                	newLeafNode(otherlv_2, grammarAccess.getFeatureAccess().getColonKeyword_2());
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:284:1: ( (lv_type_3_0= ruleTypeRef ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:285:1: (lv_type_3_0= ruleTypeRef )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:285:1: (lv_type_3_0= ruleTypeRef )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:286:3: lv_type_3_0= ruleTypeRef
            {
             
            	        newCompositeNode(grammarAccess.getFeatureAccess().getTypeTypeRefParserRuleCall_3_0()); 
            	    
            pushFollow(FOLLOW_ruleTypeRef_in_ruleFeature580);
            lv_type_3_0=ruleTypeRef();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getFeatureRule());
            	        }
                   		set(
                   			current, 
                   			"type",
                    		lv_type_3_0, 
                    		"TypeRef");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFeature"


    // $ANTLR start "entryRuleTypeRef"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:310:1: entryRuleTypeRef returns [EObject current=null] : iv_ruleTypeRef= ruleTypeRef EOF ;
    public final EObject entryRuleTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTypeRef = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:311:2: (iv_ruleTypeRef= ruleTypeRef EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:312:2: iv_ruleTypeRef= ruleTypeRef EOF
            {
             newCompositeNode(grammarAccess.getTypeRefRule()); 
            pushFollow(FOLLOW_ruleTypeRef_in_entryRuleTypeRef616);
            iv_ruleTypeRef=ruleTypeRef();

            state._fsp--;

             current =iv_ruleTypeRef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTypeRef626); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTypeRef"


    // $ANTLR start "ruleTypeRef"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:319:1: ruleTypeRef returns [EObject current=null] : (this_EntityTypeRef_0= ruleEntityTypeRef | this_DataTypeRef_1= ruleDataTypeRef ) ;
    public final EObject ruleTypeRef() throws RecognitionException {
        EObject current = null;

        EObject this_EntityTypeRef_0 = null;

        EObject this_DataTypeRef_1 = null;


         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:322:28: ( (this_EntityTypeRef_0= ruleEntityTypeRef | this_DataTypeRef_1= ruleDataTypeRef ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:323:1: (this_EntityTypeRef_0= ruleEntityTypeRef | this_DataTypeRef_1= ruleDataTypeRef )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:323:1: (this_EntityTypeRef_0= ruleEntityTypeRef | this_DataTypeRef_1= ruleDataTypeRef )
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==RULE_ID) ) {
                alt4=1;
            }
            else if ( ((LA4_0>=19 && LA4_0<=22)) ) {
                alt4=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }
            switch (alt4) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:324:5: this_EntityTypeRef_0= ruleEntityTypeRef
                    {
                     
                            newCompositeNode(grammarAccess.getTypeRefAccess().getEntityTypeRefParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleEntityTypeRef_in_ruleTypeRef673);
                    this_EntityTypeRef_0=ruleEntityTypeRef();

                    state._fsp--;

                     
                            current = this_EntityTypeRef_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:334:5: this_DataTypeRef_1= ruleDataTypeRef
                    {
                     
                            newCompositeNode(grammarAccess.getTypeRefAccess().getDataTypeRefParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleDataTypeRef_in_ruleTypeRef700);
                    this_DataTypeRef_1=ruleDataTypeRef();

                    state._fsp--;

                     
                            current = this_DataTypeRef_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTypeRef"


    // $ANTLR start "entryRuleEntityTypeRef"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:350:1: entryRuleEntityTypeRef returns [EObject current=null] : iv_ruleEntityTypeRef= ruleEntityTypeRef EOF ;
    public final EObject entryRuleEntityTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEntityTypeRef = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:351:2: (iv_ruleEntityTypeRef= ruleEntityTypeRef EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:352:2: iv_ruleEntityTypeRef= ruleEntityTypeRef EOF
            {
             newCompositeNode(grammarAccess.getEntityTypeRefRule()); 
            pushFollow(FOLLOW_ruleEntityTypeRef_in_entryRuleEntityTypeRef735);
            iv_ruleEntityTypeRef=ruleEntityTypeRef();

            state._fsp--;

             current =iv_ruleEntityTypeRef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleEntityTypeRef745); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEntityTypeRef"


    // $ANTLR start "ruleEntityTypeRef"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:359:1: ruleEntityTypeRef returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) ( (lv_multi_1_0= '*' ) )? ) ;
    public final EObject ruleEntityTypeRef() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_multi_1_0=null;

         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:362:28: ( ( ( (otherlv_0= RULE_ID ) ) ( (lv_multi_1_0= '*' ) )? ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:363:1: ( ( (otherlv_0= RULE_ID ) ) ( (lv_multi_1_0= '*' ) )? )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:363:1: ( ( (otherlv_0= RULE_ID ) ) ( (lv_multi_1_0= '*' ) )? )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:363:2: ( (otherlv_0= RULE_ID ) ) ( (lv_multi_1_0= '*' ) )?
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:363:2: ( (otherlv_0= RULE_ID ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:364:1: (otherlv_0= RULE_ID )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:364:1: (otherlv_0= RULE_ID )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:365:3: otherlv_0= RULE_ID
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getEntityTypeRefRule());
            	        }
                    
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEntityTypeRef790); 

            		newLeafNode(otherlv_0, grammarAccess.getEntityTypeRefAccess().getReferencedEntityCrossReference_0_0()); 
            	

            }


            }

            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:376:2: ( (lv_multi_1_0= '*' ) )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==18) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:377:1: (lv_multi_1_0= '*' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:377:1: (lv_multi_1_0= '*' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:378:3: lv_multi_1_0= '*'
                    {
                    lv_multi_1_0=(Token)match(input,18,FOLLOW_18_in_ruleEntityTypeRef808); 

                            newLeafNode(lv_multi_1_0, grammarAccess.getEntityTypeRefAccess().getMultiAsteriskKeyword_1_0());
                        

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getEntityTypeRefRule());
                    	        }
                           		setWithLastConsumed(current, "multi", true, "*");
                    	    

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEntityTypeRef"


    // $ANTLR start "entryRuleDataTypeRef"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:399:1: entryRuleDataTypeRef returns [EObject current=null] : iv_ruleDataTypeRef= ruleDataTypeRef EOF ;
    public final EObject entryRuleDataTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDataTypeRef = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:400:2: (iv_ruleDataTypeRef= ruleDataTypeRef EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:401:2: iv_ruleDataTypeRef= ruleDataTypeRef EOF
            {
             newCompositeNode(grammarAccess.getDataTypeRefRule()); 
            pushFollow(FOLLOW_ruleDataTypeRef_in_entryRuleDataTypeRef858);
            iv_ruleDataTypeRef=ruleDataTypeRef();

            state._fsp--;

             current =iv_ruleDataTypeRef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDataTypeRef868); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDataTypeRef"


    // $ANTLR start "ruleDataTypeRef"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:408:1: ruleDataTypeRef returns [EObject current=null] : ( ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )? ) ;
    public final EObject ruleDataTypeRef() throws RecognitionException {
        EObject current = null;

        Token lv_multi_1_0=null;
        Enumerator lv_referencedDataType_0_0 = null;


         enterRule(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:411:28: ( ( ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )? ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:412:1: ( ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )? )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:412:1: ( ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )? )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:412:2: ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )?
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:412:2: ( (lv_referencedDataType_0_0= ruleDataTypes ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:413:1: (lv_referencedDataType_0_0= ruleDataTypes )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:413:1: (lv_referencedDataType_0_0= ruleDataTypes )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:414:3: lv_referencedDataType_0_0= ruleDataTypes
            {
             
            	        newCompositeNode(grammarAccess.getDataTypeRefAccess().getReferencedDataTypeDataTypesEnumRuleCall_0_0()); 
            	    
            pushFollow(FOLLOW_ruleDataTypes_in_ruleDataTypeRef914);
            lv_referencedDataType_0_0=ruleDataTypes();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getDataTypeRefRule());
            	        }
                   		set(
                   			current, 
                   			"referencedDataType",
                    		lv_referencedDataType_0_0, 
                    		"DataTypes");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:430:2: ( (lv_multi_1_0= '*' ) )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==18) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:431:1: (lv_multi_1_0= '*' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:431:1: (lv_multi_1_0= '*' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:432:3: lv_multi_1_0= '*'
                    {
                    lv_multi_1_0=(Token)match(input,18,FOLLOW_18_in_ruleDataTypeRef932); 

                            newLeafNode(lv_multi_1_0, grammarAccess.getDataTypeRefAccess().getMultiAsteriskKeyword_1_0());
                        

                    	        if (current==null) {
                    	            current = createModelElement(grammarAccess.getDataTypeRefRule());
                    	        }
                           		setWithLastConsumed(current, "multi", true, "*");
                    	    

                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDataTypeRef"


    // $ANTLR start "ruleDataTypes"
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:453:1: ruleDataTypes returns [Enumerator current=null] : ( (enumLiteral_0= 'String' ) | (enumLiteral_1= 'float' ) | (enumLiteral_2= 'boolean' ) | (enumLiteral_3= 'int' ) ) ;
    public final Enumerator ruleDataTypes() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;
        Token enumLiteral_3=null;

         enterRule(); 
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:455:28: ( ( (enumLiteral_0= 'String' ) | (enumLiteral_1= 'float' ) | (enumLiteral_2= 'boolean' ) | (enumLiteral_3= 'int' ) ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:456:1: ( (enumLiteral_0= 'String' ) | (enumLiteral_1= 'float' ) | (enumLiteral_2= 'boolean' ) | (enumLiteral_3= 'int' ) )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:456:1: ( (enumLiteral_0= 'String' ) | (enumLiteral_1= 'float' ) | (enumLiteral_2= 'boolean' ) | (enumLiteral_3= 'int' ) )
            int alt7=4;
            switch ( input.LA(1) ) {
            case 19:
                {
                alt7=1;
                }
                break;
            case 20:
                {
                alt7=2;
                }
                break;
            case 21:
                {
                alt7=3;
                }
                break;
            case 22:
                {
                alt7=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;
            }

            switch (alt7) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:456:2: (enumLiteral_0= 'String' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:456:2: (enumLiteral_0= 'String' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:456:4: enumLiteral_0= 'String'
                    {
                    enumLiteral_0=(Token)match(input,19,FOLLOW_19_in_ruleDataTypes996); 

                            current = grammarAccess.getDataTypesAccess().getSTRINGEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_0, grammarAccess.getDataTypesAccess().getSTRINGEnumLiteralDeclaration_0()); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:462:6: (enumLiteral_1= 'float' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:462:6: (enumLiteral_1= 'float' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:462:8: enumLiteral_1= 'float'
                    {
                    enumLiteral_1=(Token)match(input,20,FOLLOW_20_in_ruleDataTypes1013); 

                            current = grammarAccess.getDataTypesAccess().getFLOATEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_1, grammarAccess.getDataTypesAccess().getFLOATEnumLiteralDeclaration_1()); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:468:6: (enumLiteral_2= 'boolean' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:468:6: (enumLiteral_2= 'boolean' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:468:8: enumLiteral_2= 'boolean'
                    {
                    enumLiteral_2=(Token)match(input,21,FOLLOW_21_in_ruleDataTypes1030); 

                            current = grammarAccess.getDataTypesAccess().getBOOLEANEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_2, grammarAccess.getDataTypesAccess().getBOOLEANEnumLiteralDeclaration_2()); 
                        

                    }


                    }
                    break;
                case 4 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:474:6: (enumLiteral_3= 'int' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:474:6: (enumLiteral_3= 'int' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/data/parser/antlr/internal/InternalAndroData.g:474:8: enumLiteral_3= 'int'
                    {
                    enumLiteral_3=(Token)match(input,22,FOLLOW_22_in_ruleDataTypes1047); 

                            current = grammarAccess.getDataTypesAccess().getINTEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_3, grammarAccess.getDataTypesAccess().getINTEnumLiteralDeclaration_3()); 
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDataTypes"

    // Delegated rules


 

    public static final BitSet FOLLOW_ruleAndroDataRoot_in_entryRuleAndroDataRoot75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAndroDataRoot85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleAndroDataRoot122 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAndroDataRoot139 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_ruleType_in_ruleAndroDataRoot165 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_ruleType_in_entryRuleType202 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleType212 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntity_in_ruleType258 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntity_in_entryRuleEntity292 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleEntity302 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_12_in_ruleEntity339 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleEntity356 = new BitSet(new long[]{0x0000000000006000L});
    public static final BitSet FOLLOW_13_in_ruleEntity374 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleEntity394 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleEntity408 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_ruleFeature_in_ruleEntity429 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_15_in_ruleEntity442 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFeature_in_entryRuleFeature478 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFeature488 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_16_in_ruleFeature525 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeature542 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleFeature559 = new BitSet(new long[]{0x0000000000780010L});
    public static final BitSet FOLLOW_ruleTypeRef_in_ruleFeature580 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTypeRef_in_entryRuleTypeRef616 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTypeRef626 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntityTypeRef_in_ruleTypeRef673 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDataTypeRef_in_ruleTypeRef700 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntityTypeRef_in_entryRuleEntityTypeRef735 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleEntityTypeRef745 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleEntityTypeRef790 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleEntityTypeRef808 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDataTypeRef_in_entryRuleDataTypeRef858 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDataTypeRef868 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDataTypes_in_ruleDataTypeRef914 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleDataTypeRef932 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleDataTypes996 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_ruleDataTypes1013 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_ruleDataTypes1030 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_22_in_ruleDataTypes1047 = new BitSet(new long[]{0x0000000000000002L});

}